#pragma once
#include "Entity_Base.h"

class Node_Base;
class Section_Base;

class Element_Base :
    public::Entity_Base
{
public:
    std::vector<std::weak_ptr<Node_Base>> m_pNode;
    std::weak_ptr<Section_Base> m_pSection;
    Eigen::VectorXd Dc;
    Eigen::MatrixXd T;

    virtual void setElement() {};
    virtual void coutElement() {};
    virtual void foutElement(std::ofstream& fout) {};

    void getDOFs(std::vector<int>& DOFs);

    virtual int getDOFNode()const { return -1; };
    virtual bool get_Ke(Eigen::MatrixXd& ke) { return false; };
    virtual void get_Load(Eigen::VectorXd& Feq) {};
    virtual void getparameterlist(Eigen::VectorXd& x1, Eigen::VectorXd& x2) {};
    virtual void getInterforce(Eigen::VectorXd& F1, Eigen::VectorXd& F2) {};
    virtual void getdisplacement(std::vector<double>& displacement, double position) {};

protected:
    Eigen::VectorXd parameterlist;
    Eigen::VectorXd InterForcelist;
};

